//未完成
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

// 更新树状数组
void add(vector<int>& fenwick, int index, int value) {
    for (; index < fenwick.size(); index += index & -index) {
        fenwick[index] += value;
    }
}

// 查询树状数组前缀和
int sum(const vector<int>& fenwick, int index) {
    int result = 0;
    for (; index > 0; index -= index & -index) {
        result += fenwick[index];
    }
    return result;
}

int main() {
    int n;
    cin >> n;
    vector<int> nums(n + 1); // 从索引 1 开始存储
    for (int i = 1; i <= n; i++) {
        cin >> nums[i];
    }

    // 创建树状数组
    vector<int> fenwick(n + 1, 0);
    long long count = 0;

    // 统计前面比当前数字小的个数
    vector<int> smallerCount(n + 1, 0);
    for (int j = 1; j <= n; j++) {
        smallerCount[j] = sum(fenwick, nums[j] - 1); // 统计比 nums[j] 小的个数
        add(fenwick, nums[j], 1); // 更新树状数组
    }

    // 清空树状数组以便后续使用
    fill(fenwick.begin(), fenwick.end(), 0);

    // 统计后面比当前数字大的个数
    vector<int> largerCount(n + 1, 0);
    for (int j = n; j >= 1; j--) {
        largerCount[j] = sum(fenwick, n) - sum(fenwick, nums[j]); // 统计比 nums[j] 大的个数
        add(fenwick, nums[j], 1); // 更新树状数组
    }

    // 计算符合条件的三元组数量
    for (int j = 2; j <= n - 1; j++) {
        count += smallerCount[j] * largerCount[j]; // 计算符合条件的三元组数量
    }

    cout << count << endl; // 输出符合条件的三元组数量
    return 0;
}

